package com.speily.current.wait_notify.deathLock;

/**
 * @Auther: SPL
 * @Date: 2019-07-30 14:54
 * @Description: 死锁 - 指两个或者两个以上的线程在执行的过程中，因争夺资源（锁）产生的一种互相等待现象，下面是最最简单的示例
 */
public class DieLockDemo2 extends Thread{
    //创建1把锁对象
    public static final Object obj1 = new Object();
    private boolean flag = false;
    public DieLockDemo2(String name , boolean flag) {
        super(name);
        this.flag = flag;
    }

    @Override
    public void run() {
        while(true){
            synchronized (obj1) {
                System.out.println(getName()+" use obj2");
                try {
                    sleep(10000l);//当前线程休眠10s
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }


    public static void main(String[] args) throws InterruptedException {

        //理论上，2个线程各自均会打印（无逻辑等待的打印），手动睡眠10s,导致其中一个线程等待另一个线程释放锁。
        DieLockDemo2 d1 = new DieLockDemo2("小王", true);
        DieLockDemo2 d2 = new DieLockDemo2("小强", false);
        d1.start();
        d2.start();

    }
}
